home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software of the Month Club 1996 August
/
Software of the Month Club 1996 August.iso
/
pc
/
win
/
dtp
/
rops32
/
ropsboot._ps
< prev
next >
Wrap
Text File
|
1996-04-02
|
22KB
|
625 lines
%!
% RoPS Interpreter - ropsboot._ps
% Copyright Roger Willcocks, 1993-1996
% All Rights Reserved
%
% The RoPS interpreter is an implementation of the level 1 PostScript
% programming language interpreter described in Adobe Systems' book,
% the 'PostScript language reference manual'. RoPS is not an Adobe
% approved product. The name 'PostScript' is a registered trademark of
% Adobe Systems Incorporated.
%
% This file, which must be called 'ropsboot._ps', is read automatically
% as RoPS starts up. After the entire file has been consumed the 'start'
% procedure (which is defined towards the end of this file) is executed.
% Everything that's not an operator is described in this file and can be
% customized.
%
% Version 4.4
/true where { pop (ropsboot is already loaded) print flush
currentfile closefile } if
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% At this point there's a prototype 'systemdict' on the dictionary %
% stack which contains an entry for each operator, and that's all. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Page: 1 1
/systemdict currentdict def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% put some dictionaries in systemdict %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/$error 20 dict def
/errordict 100 dict def
/userdict 500 dict def
/FontDirectory 500 dict readonly def
/serverdict 20 dict def
/statusdict 80 dict def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 'end' requires that there are at least three dictionaries %
% on the dictionary stack; juggle things so we can safely 'end' %
% the dictionaries we are about to put in to systemdict. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
userdict begin
systemdict begin
/true 1 1 eq def
/false true not def
% change this line if your fonts are Unicode-encoded
/unicode false def
/build$error {
$error begin
/newerror false def
/errorname null def
/command null def
% these will be sub-arrays of the space reserved below
/ostack [] def
/estack [] def
/dstack [] def
$error /oreserve 500 array put
$error /ereserve 260 array put
$error /dreserve 25 array put
end % $error dictionary
} def
/.error { % in systemdict
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% following two lines report error as it occurs; not standard behaviour %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% (error: ) print dup print (; ) print
%%% (command: ) print exch dup =print exch (\n) print pstack flush
% following catches errors in this file (before the server has started)
$error /newerror known not {
(error: ) print dup print (; ) print
(command: ) print exch dup =print exch (\n) print flush
stop
} if
$error /newerror true put
$error exch /errorname exch put
$error exch /command exch put
count
$error /oreserve get exch
0 exch getinterval
astore
$error exch /ostack exch put
$error /dstack
$error /dreserve get dictstack
put
$error /estack
$error /ereserve get execstack
dup length 2 sub 0 exch getinterval
put
$error /ostack get
aload pop
stop
} def
errordict begin
/handleerror {
$error /newerror get % remember, dictionary stack may be full
{
$error /newerror false put
%%%%% (%%[ Error: ) print
%%%%% $error /errorname get =print
%%%%% (; OffendingCommand: ) print
%%%%% $error /command get =print
%%%%% ( ]%%\n) print % flush
$error /errorname get /interrupt ne {
$error /command get =print (: ) print
$error /errorname get =print
(\n\nA fault has been detected in this\n) print
(document and it has been closed) print
} if
} if
} def
/dictfull { (dictfull) .error } def
/dictstackoverflow { (dictstackoverflow) .error } def
/dictstackunderflow { (dictstackunderflow) .error } def
/execstackoverflow { (execstackoverflow) .error } def
/invalidaccess { (invalidaccess) .error } def
/invalidexit { (invalidexit) .error } def
/invalidfileaccess { (invalidfileaccess) .error } def
/invalidfont { (invalidfont) .error } def
/invalidrestore { (invalidrestore) .error } def
/ioerror { (ioerror) .error } def
/limitcheck { (limitcheck) .error } def
/nocurrentpoint { (nocurrentpoint) .error } def
/rangecheck { (rangecheck) .error } def
/stackoverflow { (stackoverflow) .error } def
/stackunderflow { (stackunderflow) .error } def
/syntaxerror { (syntaxerror) .error } def
/timeout { (timeout) .error } def
/typecheck { (typecheck) .error } def
/undefined { (undefined) .error } def
/undefinedfilename { (undefinedfilename) .error } def
/undefinedresult { (undefinedresult) .error } def
/unmatchedmark { (unmatchedmark) .error } def
/unregistered { (unregistered) .error } def
/VMerror {
$error /newerror true put
$error /errorname (VMerror) put
$error exch /command exch put
stop
} def
/interrupt { (interrupt) .error } def % ctrl-C
end % errordict
serverdict begin
/exitservercalled false def
/statusmsg { (%%[ ) print print ( ]%%\n) print flush } def
/exitserver
{
pop
$error /newerror false put
serverdict /exitservercalled true put
stop
} def
/execjob
{
{ (%stdin) (r) file cvx exec } stopped
{
$error /newerror get {
{ handleerror } stopped pop % catch errors in handler
%% (Flushing: rest of job (to end-of-file) will be ignored)
%% serverdict /statusmsg get exec
(%stdin) (r) file flushfile
} if % newerror
} if % stopped
flush clear
countdictstack 2 sub { end } repeat
} def
end % serverdict
% still putting things into systemdict
/handleerror { systemdict /errordict get /handleerror get exec } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% compatibility definitions %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
statusdict begin
/setjobtimeout {} def
/product (RoPS) def
end
% temporary, to allow FrameMaker spot colours
/currentcolortransfer { currenttransfer dup dup dup } def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% default halftone screen; 28 lines per inch (on a 100 lpi printer) %
% at an angle of 57 degrees. Circular dots becoming square at 50% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/ScreenFreq 28 def
/ScreenAngle 57 def
/LPI 100 def
/WidthMM 210 def
/DepthMM 297 def
(framebuffer) getprofile { { cvx exec def } forall } if % maybe override
%%%%%%%%%%%%%%%%%%%%%%%%%
% create a frame buffer %
%%%%%%%%%%%%%%%%%%%%%%%%%
/framescale LPI 72 div def
/pixelwidth WidthMM 25.4 div LPI mul cvi def
/pixeldepth DepthMM 25.4 div LPI mul cvi def
[ framescale 0 0 framescale 0 0 ]
pixelwidth pixeldepth {} framedevice % create frame device (proc unused)
ScreenFreq ScreenAngle
{ abs exch abs 2 copy add 1 gt
{ 1 sub dup mul exch 1 sub dup mul add 1 sub }
{ dup mul exch dup mul add 1 exch sub }
ifelse } setscreen
end % systemdict
systemdict readonly pop
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% finished with systemdict; userdict is waiting on the stack ... %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/StandardEncoding
[
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/space/exclam/quotedbl
/numbersign/dollar/percent/ampersand/quoteright/parenleft
/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven/eight/nine/colon/semicolon
/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K
/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash
/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g
/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft
/bar/braceright/asciitilde/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/space/exclamdown/cent/sterling/fraction/yen/florin
/section/currency/quotesingle/quotedblleft/guillemotleft
/guilsinglleft/guilsinglright/fi/fl/.notdef/endash/dagger
/daggerdbl/periodcentered/.notdef/paragraph/bullet/quotesinglbase
/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand
/.notdef/questiondown/.notdef/grave/acute/circumflex/tilde
/macron/breve/dotaccent/dieresis/.notdef/degree/cedilla/.notdef
/hungarumlaut/ogonek/caron/emdash/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/AE/.notdef
/ordfeminine/.notdef/.notdef/.notdef/.notdef/Lslash/Oslash/OE
/ordmasculine/.notdef/.notdef/.notdef/.notdef/.notdef/ae
/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef/lslash/oslash
/oe/germandbls/.notdef/.notdef/.notdef/.notdef
] def
/ISOLatin1Encoding
[
/grave/acute/circumflex/tilde/macron/breve/dotaccent/dieresis
/ring/cedilla/hungarumlaut/ogonek/caron/dotlessi/fi/fl/Lslash
/lslash/Zcaron/zcaron/minus/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/space
/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven/eight/nine/colon
/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H
/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft
/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d
/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
/braceleft/bar/braceright/asciitilde/.notdef/.notdef/.notdef
/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
/circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef/.notdef
/.notdef/.notdef/quoteleft/quoteright/quotedblleft/quotedblright
/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe
/.notdef/.notdef/Ydieresis/.notdef/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree
/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute
/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth
/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae
/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute
/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex
/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
/udieresis/yacute/thorn/ydieresis
] def
/findfont {
dup FontDirectory exch known not {
(findfont: can't find ) print dup =print
(; using Courier) print flush
dup CourierFont ttmap
} if
FontDirectory exch get
} bind def
/=string 140 string def
/=print { =string cvs print } bind def
/= { =print (\n) print } bind def
/==dict 20 dict def
==dict begin
/=qc { /str ( x) def % quote a character
str exch 0 exch put
(\nx\\n\rx\\r\tx\\t\bx\\b\fx\\f\(x\\\(\)x\\\)\\x\\\\)
str search
{ pop pop 0 2 getinterval }
{ pop str 0 1 getinterval } ifelse print
} bind def
/indent { 1 1 depth { pop (\t) print } for } def
/expand {
indent dup type exec print
(\n) print
} bind def
/arraytype {
dup xcheck { ({\n) } { ([\n) } ifelse print
/depth depth 1 add def
dup rcheck { dup {expand} forall }
{ indent (???\n) print } ifelse
/depth depth 1 sub def
indent xcheck { (}) } { (]) } ifelse
} bind def
/booleantype { { (true) } { (false) } ifelse } bind def
/dicttype { dup length =print ( ) print maxlength =print
( ) print (-dicttype-) } bind def
/filetype { pop (-filetype-) } bind def
/fonttype { pop (-fonttype-) } bind def
/integertype { =string cvs } bind def
/marktype { pop (-marktype-) } bind def
/nametype { dup xcheck not { (/) print } if =string cvs } bind def
/nulltype { pop (-nulltype-) } bind def
/operatortype { (--) print =string cvs print (--) } bind def
/realtype { =string cvs } bind def
/savetype { pop (-savetype-) } bind def
/stringtype { dup rcheck { (\() print {=qc} forall (\)) }
{ pop (\(???\)) } ifelse } bind def
/depth 0 def
end
/== {
==dict begin
expand
end
} bind def
/stack { count dup 1 add copy { = } repeat pop } bind def
/pstack { count dup 1 add copy { == } repeat pop } bind def
(\004) cvn {} def % ignore ^D in input file
(\032) cvn {} def % and ^Z
/server
{
{
(%stdin) (r) file status not { exit } if
serverdict /serversave save put
% has to be done inside save context, since writing
% to a saved array uses VM, and it could be vmerror
build$error
serverdict /execjob get exec
serverdict /exitservercalled get
serverdict /serversave get restore
{
(exitserver : permanent state may be changed)
serverdict /statusmsg get exec
serverdict /execjob get exec
} if % exitservercalled
} loop
} bind def
/quit { stop } bind def
/start { server } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% userdict is still on stack; system/user specific stuff starts here %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/encode {
{ 1 index def 1 add } forall pop
} def
/TT_ANSI_CharStrings 650 dict dup % map character name to font entry
begin
32 [
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal
/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S
/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum
/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t
/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
] encode
16#a0 [
/nbspace/exclamdown/cent/sterling/currency/yen/brokenbar
/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot
/sfthyphen/registered/macron/degree/plusminus/twosuperior
/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf
/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde
/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex
/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde
/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex
/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde
/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
/yacute/thorn/ydieresis] encode
unicode {
% Windows encoding
130 [
/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
/circumflex/perthousand/Scaron/guilsinglleft/OE
] encode
145 [
/quoteleft/quoteright/quotedblleft/quotedblright/bullet
/endash/emdash/tilde/trademark/scaron/guilsinglright/oe
] encode
/minus 150 def
/Ydieresis 159 def
% skip over Unicode encoding
{ currentfile =string readline pop (/xyzzy) eq { exit } if } loop
} if
% NT (Unicode) encoding
16#100 [
/Amacron/amacron/Abreve/abreve/Aogonek/aogonek/Cacute/cacute/Ccircumflex
/ccircumflex/Cdot/cdot/Ccaron/ccaron/Dcaron/dcaron/Dslash/dmacron
/Emacron/emacron/Ebreve/ebreve/Edot/edot/Eogonek/eogonek/Ecaron/ecaron
/Gcircumflex/gcircumflex/Gbreve/gbreve/Gdot/gdot/Gcedilla/gcedilla
/Hcircumflex/hcircumflex/Hbar/hbar/Itilde/itilde/Imacron/imacron/Ibreve
/ibreve/Iogonek/iogonek/Idot/dotlessi/IJ/ij/Jcircumflex/jcircumflex
/Kcedilla/kcedilla/kgreenlandic/Lacute/lacute/Lcedilla/lcedilla/Lcaron
/lcaron/Ldot/ldot/Lslash/lslash/Nacute/nacute/Ncedilla/ncedilla/Ncaron
/ncaron/napostrophe/Eng/eng/Omacron/omacron/Obreve/obreve/Odblacute
/odblacute/OE/oe/Racute/racute/Rcedilla/rcedilla/Rcaron/rcaron/Sacute
/sacute/Scircumflex/scircumflex/Scedilla/scedilla/Scaron/scaron/Tcedilla
/tcedilla/Tcaron/tcaron/Tbar/tbar/Utilde/utilde/Umacron/umacron/Ubreve
/ubreve/Uring/uring/Udblacute/udblacute/Uogonek/uogonek/Wcircumflex
/wcircumflex/Ycircumflex/ycircumflex/Ydieresis/Zacute/zacute/Zdot/zdot
/Zcaron/zcaron/longs
] encode
16#384 [
/tonos/dieresistonos/Alphatonos/anoteleia/Epsilontonos/Etatonos
/Iotatonos/c38b/Omicrontonos/c38d/Upsilontonos/Omegatonos
/iotadieresistonos/Alpha/Beta/Gamma/Delta/Epsilon/Zeta/Eta/Theta/Iota
/Kappa/Lambda/Mu/Nu/Xi/Omicron/Pi/Rho/c3a2/Sigma/Tau/Upsilon/Phi
/Chi/Psi/Omega/Iotadieresis/Upsilondieresis/alphatonos/epsilontonos
/etatonos/iotatonos/upsilon-dieresistonos/alpha/beta/gamma/delta/epsilon
/zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/omicron/pi/rho/sigma1
/sigma/tau/upsilon/phi/chi/psi/omega/iotadieresis/upsilondieresis
/omicrontonos/upsilontonos/omegatonos
] encode
% read and define key / value pairs until key = /zyzzy is seen
{
currentfile token pop dup /xyzzy eq
{ pop exit }
{ currentfile token pop def } ifelse
} loop
/florin 16#192/Aringacute 16#1fa/aringacute 16#1fb/AEacute 16#1fc
/aeacute 16#1fd/Oslashacute 16#1fe/oslashacute 16#1ff/circumflex
16#2c6/caron 16#2c7/macron 16#2c9/tilde 16#2d6/breve 16#2d8
/dotaccent 16#2d9/ring 16#2da/ogonek 16#2db/tilde 16#2dc
/hungarumlaut 16#2dd
/Wgrave 16#1e80/wgrave 16#1e81/Wacute 16#1e82/wacute 16#1e83
/Wdieresis 16#1e84/wdieresis 16#1e85/Ygrave 16#1ef2/ygrave 16#1ef3
/endash 16#2013/emdash 16#2014/underscoredbl 16#2017/quoteleft
16#2018/quoteright 16#2019/quotesinglbase 16#201a/quotereversed
16#201b/quotedblleft 16#201c/quotedblright 16#201d/quotedblbase
16#201e/dagger 16#2020/daggerdbl 16#2021/bullet 16#2022/ellipsis
16#2026/perthousand 16#2030/minute 16#2032/second 16#2033
/guilsinglleft 16#2039/guilsinglright 16#203a/exclamdbl 16#203c
/radicalex 16#203e/fraction 16#2044/nsuperior 16#207f/franc 16#20a3
/peseta 16#20a7/trademark 16#2122/Ohm 16#2126/estimated 16#212e
/oneeighth 16#215b/threeeighths 16#215c/fiveeighths 16#215d
/seveneighths 16#215e/arrowleft 16#2190/arrowup 16#2191/arrowright
16#2192/arrowdown 16#2193/arrowboth 16#2194/arrowupdn 16#2195
/arrowupdnbse 16#21a8/partialdiff 16#2202/increment 16#2206/product
16#220f/summation 16#2211/minus 16#2212/fraction 16#2215
/periodcentered 16#2219/radical 16#221a/infinity 16#221e/orthogonal
16#221f/intersection 16#2229/integral 16#222b/approxequal 16#2248
/notequal 16#2260/equivalence 16#2261/lessequal 16#2264/greaterequal
16#2265/house 16#2302/revlogicalnot 16#2310/integraltp
16#2320/integralbt 16#2321/upblock 16#2580/dnblock 16#2584/block
16#2588/lfblock 16#258c/rtblock 16#2590/ltshade 16#2591/shade
16#2592/dkshade 16#2593/filledbox 16#25a0/filledrect 16#25ac/triagup
16#25b2/triagrt 16#25ba/triagdn 16#25bc/triaglf 16#25c4/lozenge
16#25ca/circle 16#25cb/invbullet 16#25d8/invcircle 16#25d9/openbullet
16#25e6/smileface 16#263a/invsmileface 16#263b/sun 16#263c/female
16#2640/male 16#2642/spade 16#2660/club 16#2663/heart 16#2665/diamond
16#2666/musicalnote 16#266a/musicalnotedbl 16#266b/applelogo
16#f000/fi 16#f001/fl 16#f002
%% do not delete, change or comment the following line !!!
/xyzzy
end def
/TT_BuildChar {
exch begin
FontName (Symbol) eq {
% unicode { 16#8000 add } if
}
{
Encoding exch get
dup CharStrings exch known not
{ pop (.notdef) } if
CharStrings exch get
} ifelse
end
dup 127 ne { ttchar } { pop } ifelse
} def
/TT_FontInfo 2 dict dup begin
/UnderlinePosition -0.1 def
/UnderlineThickness 0.1 def
end def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This function associates PostScript font names with Windows TrueType %
% fonts. The RoPS interpreter uses the Windows rendering routines to %
% paint the TrueType characters. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/ttmap {
11 dict dup begin
exch /TTName exch def
exch /FontName exch def
/Metrics 0 dict def
/FontMatrix [ 1.0 0.0 0.0 1.0 0.0 0.0 ] readonly def
/FontType 3 def
/Encoding StandardEncoding def
/FontBBox { 0 0 0 0 } readonly def
/CharStrings TT_ANSI_CharStrings def
/BuildChar /TT_BuildChar load def
/FontInfo TT_FontInfo def
FontName end
exch definefont pop
} def
(fontlist) getprofile { { ttmap } forall } if
(fontalias) getprofile { { ttmap } forall } if
/CourierFont FontDirectory /Courier get /TTName get def
%%%%%%%%%%%
% hackery %
%%%%%%%%%%%
/a4tray { a4 } def
/lettertray { letter } def
%
% % 8" x 10.92" imageable area centred on letter paper
% % Under Development ! Setting a new device interacts badly with zooming
%
% /letter {
% [ framescale 0 0 framescale -2.88 framescale mul -18 framescale mul ]
% 8 72 mul framescale mul cvi 10.92 72 mul framescale mul cvi {} framedevice
% } def
%
% % 8" x 10.92" imageable area centred on A4 paper
%
% /a4 {
% [ framescale 0 0 framescale -9.72 framescale mul -27.72 framescale mul ]
% 8 72 mul framescale mul cvi 10.92 72 mul framescale mul cvi {} framedevice
% } def
%
/a4 {} def
/letter {} def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% when we fall off the end of this file, 'start' will be executed %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% --- end ---